package demo05;

import java.util.function.Consumer;

/*
 *  父类对象/当前对象引用成员方法
 *  测试类继承Fu父类
 *  本例中使用Lambda时，使用this调用和不使用this调用结果是相同的，都能调用到本类的成员方法
 *  但是如果使用方法引用，则只能使用this调用，才能引用到本类成员方法
 */
public class Demo03MethodReference extends Fu {
    public static void main(String[] args) {
        // 主方法为静态方法，不可使用this和super关键字，通过调用测试方法查看结果
        new Demo03MethodReference().test();
    }

    public void test() {
        // 使用Lambda
        printString("小飞棍来咯", string->print(string)); // 子类方法输出：小飞棍来咯
        printString("小飞棍来咯", string->this.print(string)); // 子类方法输出：小飞棍来咯
        printString("小飞棍来咯", string->super.print(string)); //  父类方法输出：小飞棍来咯
        // 使用方法引用
        printString("小飞棍来咯", this::print); // 子类方法输出：小飞棍来咯
        printString("小飞棍来咯", super::print); //  父类方法输出：小飞棍来咯
    }

    public static void printString(String string, Consumer<String> consumer) {
        consumer.accept(string);
    }

    public void print(String string) {
        System.out.println("子类方法输出：" + string);
    }
}
